package com.feiwo.nonego.rpc.registry.api;

import com.feiwo.nonego.rpc.protocol.meta.ServiceMeta;
import com.feiwo.nonego.rpc.registry.api.config.RegistryConfig;

import java.io.IOException;

/**
 *
 *
 * @author feiwo 2025-08-08
 */
public interface RegistryService {

    /**
     * 注册服务
     *
     * @param meta 服务元数据
     * @throws Exception 注册服务过程中发生异常
     */
    void register(ServiceMeta meta) throws Exception;

    /**
     * 取消注册服务
     * @param meta 服务元数据
     * @throws Exception 取消注册服务过程中发生异常
     */
    void unRegister(ServiceMeta meta) throws Exception;

    /**
     * 服务发现
     * @param serviceName 服务名称
     * @param invokerHashCode 服务调用者hashCode
     * @param sourceIp 源IP地址
     * @return 服务元数据
     */
    ServiceMeta discovery(String serviceName, int invokerHashCode, String sourceIp) throws Exception;

    void destroy() throws IOException;

    /**
     * 初始化
     * @param registryConfig 注册中心配置
     * @throws Exception 初始化过程中发生异常
     */
    default void init(RegistryConfig registryConfig) throws Exception{}
}
